/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.sapra.abc;

import caintra.Sapra.Model.Calendariofacturacionpracticantes;
import caintra.Sapra.Model.Facturaajuste;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Pantalla.Ajuste.AjusteQuery;
import caintra.Sapra.Pantalla.Prefactura.PrefacturaMQuery;
import echopointng.ExtentEx;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Color;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SelectField;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.list.DefaultListModel;
import nextapp.echo2.extras.app.TabPane;
import nextapp.echo2.extras.app.layout.TabPaneLayoutData;
import org.sapra.Prefactura.PrefacturaMO;
import org.sapra.dao.Aseguradora;
import org.sapra.dao.CCosto;
import org.sapra.dao.Carrera;
import org.sapra.dao.Colonia;
import org.sapra.dao.Departamento;
import org.sapra.dao.Direccion;
import org.sapra.dao.EMailMO;
import org.sapra.dao.Empresa;
import org.sapra.dao.ModelXML;
import org.sapra.dao.Periodo;
import org.sapra.dao.Planseguro;
import org.sapra.dao.Polizaseguro;
import org.sapra.dao.Practicante;
import org.sapra.dao.Universidad;
import org.sapra.dao.Usuario;
import org.sapra.dep.RFC;
import org.sapra.dep.conexion.DAC_Insert;
import org.sapra.dep.echo.CambioFecha.Aviso;
import org.sapra.eai.aig.ConvenioPDF;
import org.sapra.eai.aig.aig;
import org.sapra.echo.Helpers;
import org.sapra.echo.wAviso;
import org.sapra.logon.dLogin;
import org.sapra.main.vPrincipal;

/**
 *
 * @author ppratsc
 */
public class vABCP extends nextapp.echo2.app.ContentPane{

    public final static int ALTA = 0;
    public final static int RENOVAR = 1;
    public final static int EDITAR = 2;
    public final static int READONLY = 3;

    private int mAction;
    private Practicante mCurrent;
    
    public static Calendar fecha;

    private TextField mNombre;
    private TextField mPaterno;
    private TextField mMaterno;
    private TextField mNatalicio;
    private SelectField mSelSexo;
    private SelectField mSelEdoCivil;
    SelectField mListPFCerrada;
    private TextField mRFC;
    private TextField mTelefono;
    private TextField mEmail;
    TextField mFInicio;
    TextField mFTermino;
    private TextField mBeca;
    private TextField mProyecto;
    private TextField mReporta;
    private SelectField mSelUniversidad;
    private SelectField mSelCarrera;
    private SelectField mSelCiclo;
    private SelectField mSelEscolaridad;
    private TextField mMatricula;
    private TextField mGrado;
    private vDireccion mDireccion;
    private SelectField mSelDepto;
    private SelectField mSelCCosto;
    private SelectField CobrarA;
    private SelectField Aseguradora;
    private SelectField plan;
    private TextField perdida;
    private TextField Reembolso;
    private TextField Costo;
    private TextField Meses;
    private TextField SegInicio;
    private TextField SegTermino;
    private TextField beneficiario1;
    private TextField porcentaje1;
    private TextField parentesco1;
    private TextField beneficiario2;
    private TextField porcentaje2;
    private TextField parentesco2;
    private SelectField mHorario;
    private SelectField mHorario2;


    // Catalogos Locales
    private DefaultListModel lmSexo;
    private DefaultListModel lmEscolaridad;
    private DefaultListModel lmEdoCivil;
    private DefaultListModel lmCiclo;
    private DefaultListModel lmFcontrato;
    private DefaultListModel CobrarPolizaA;

    //Botones
    private Button mbGuardar;
    private Button mbCancelar;
    private int fk_direccion=0;
    //Referencia a la Lista de Practicantes
    private vPracticante mVista;
    private WindowPane wpIni=new WindowPane();
    private WindowPane wpFin=new WindowPane();
    private Date fechaInicio=new Date();
    private Date fechaFin=new Date();
    private Empresa empresa=new Empresa();
    private SimpleDateFormat spd=new SimpleDateFormat("yyyy-MM-dd");
    private int ventInicio=0;
    private int ventFin=0;
    private vPrincipal princ;
    private List<Calendariofacturacionpracticantes> lista_periodo;
    private Calendariofacturacionpracticantes periodo_actual;

    static String DIR_IMAGEN="org/sapra/echo/image/";

    public vABCP(){}
    public vABCP(Practicante p,int action, vPracticante vista,vPrincipal princ) {
        super();
        mAction = action;
        empresa = dLogin.getEmpresa();
        if(princ != null)this.princ = princ;
        if(vista != null)mVista = vista;
        initComponents();

        if(p != null){
            SetPracticante(p);
            mCurrent = p;
            fk_direccion=p.getFk_direccionId();
        }


        
        

    }
    private TabPaneLayoutData tpl=new TabPaneLayoutData();
    private TabPaneLayoutData tp2=new TabPaneLayoutData();
    private TabPaneLayoutData tp3=new TabPaneLayoutData();
    private Button selBD,sel1,sel2;
    private Button datosPrac,datosSeg;
    private SplitPane sp,sp2;
    private Row header,linea1,linea2,linea3,linea4,linea5,titlePrac,titleSeguro;
    //Rows para
    private Row titleDG;
    private void initComponents() {
        //Columna Principal


        TabPane tp=Helpers.TabPanel();
        tpl=new TabPaneLayoutData();
        tp2=new TabPaneLayoutData();
        tp3=new TabPaneLayoutData();
        tpl.setTitle("DATOS PRINCIPALES");
        tp2.setTitle("SEGURO");
        tp3.setTitle("DIRECCION");
        
        tp.setTabHeight(new Extent(25));

        
        Column col2=new Column();
        col2.setCellSpacing(new Extent(15));

        Column col1 = Helpers.Column("Default", new Extent(5), this);
        col1.setLayoutData(tpl);
        /*datosPrac=Helpers.Button2("Datos Principales",new ActionListener(){public void actionPerformed(ActionEvent e) {titleSeguro.setVisible(false);titlePrac.setVisible(true);}});
        datosPrac.setWidth(new Extent(150));
        datosSeg=Helpers.Button2("SEGURO",new ActionListener(){public void actionPerformed(ActionEvent e) {titlePrac.setVisible(false);titleSeguro.setVisible(true);}});
        datosSeg.setWidth(new Extent(150));
        header=new Row();
        header.add(datosPrac);
        header.add(datosSeg);


        linea1=new Row();
        linea1.add(titleDG=Helpers.rowLabel("DATOS GENERALES", Color.BLACK));

        col2.add(header);
        col2.add(linea1);linea1.setAlignment(Alignment.ALIGN_CENTER);

        add(col2);*/
        //Datos Personales
        //Row1
       //ENCBEZADOS

       Row enc1 = Helpers.Row("Default", new Extent(5), col1);
       Helpers.Label("DATOS GENERALES", new Color(0x011dac), enc1);
       enc1.setAlignment(Alignment.ALIGN_CENTER);

       Row row1 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("NOMBRES:", Color.BLACK, row1);
        mNombre = Helpers.Text("", row1);
        mNombre.setMaximumLength(30);
        Helpers.Label("PATERNO:", Color.BLACK, row1);
        mPaterno = Helpers.Text("", row1);
        mPaterno.setMaximumLength(30);
        Helpers.Label("MATERNO:", Color.BLACK, row1);
        mMaterno = Helpers.Text("", row1);
        mMaterno.setMaximumLength(30);

        Row row2 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("NATALICIO:", Color.BLACK, row2);
        mNatalicio = Helpers.Text("",row2);
        mNatalicio.setEnabled(false);

        selBD=Helpers.Button(">", row2, new ActionListener(){public void actionPerformed(ActionEvent e) {
            if(mAction!=READONLY ){
                    cal(4);
            }
        }});
        if(mAction!=READONLY){
            selBD.setEnabled(true);
        }

        Helpers.Label("SEXO:", Color.BLACK, row2);
        mSelSexo = Helpers.SelectField(row2, null);
        Helpers.Label("EDO. CIVIL:", Color.BLACK, row2);
        mSelEdoCivil = Helpers.SelectField(row2, null);
        mSelEdoCivil.setSelectedIndex(2);

        Row row3 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("RFC:", Color.BLACK, row3);
        mRFC = Helpers.Text("", row3);
        Helpers.Label("TELEFONO:", Color.BLACK, row3);
        mTelefono = Helpers.Text("", row3);
        mTelefono.setMaximumLength(10);
        Row row280 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("EMAIL:", Color.BLACK, row280);
        mEmail = Helpers.Text("", row280);
        mEmail.setWidth(new Extent(350));
        mEmail.setMaximumLength(60);
        

        Row row4 = Helpers.Row("Default", new Extent(5), col1);
        
        Helpers.Label("INICIA:", Color.BLACK, row4);
        mFInicio =Helpers.Text(spd.format(fechaInicio), row4);

        sel1=Helpers.Button(">", row4, new ActionListener(){public void actionPerformed(ActionEvent e) {
            if(empresa.getFechaTerminoAbierta()==false){
                    cal(1);
            }else{
                cal(2);
            }
        }});

        Helpers.Label("OPCION POR MESES", Color.BLACK, row4);
        mListPFCerrada= Helpers.SelectField(row4,null);
        mListPFCerrada.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                if(mListPFCerrada.getSelectedIndex()<0){
                     add(new Aviso("Seleccion de Mes", "Favor de Seleccionar la Cantidad de Mes"));
                     return;
                }
               
                Calendar fechafin = GregorianCalendar.getInstance();


                fechafin.setTimeInMillis(fechaInicio.getTime());
                int num=mListPFCerrada.getSelectedIndex();
                fechafin.add(Calendar.MONTH,num+1);
                fechafin.getTime();
                mFTermino.setText(spd.format(fechafin.getTime()));
                

                if(empresa.getPracticantes_seguro()==true){
                    if(mAction !=  EDITAR){
                        SegInicio.setText(mFInicio.getText());
                        SegTermino.setText(mFTermino.getText());
                        if(Aseguradora.getSelectedIndex()!=-1){
                                Aseguradora asg=(Aseguradora)Aseguradora.getSelectedItem();
                                planesList=dPracticante.getPlanes(asg.getAseguradoraId(),num+1);
                                plan.setModel(new DefaultListModel(planesList.toArray()));
                                plan.setSelectedIndex(-1);
                                perdida.setText("");
                                Reembolso.setText("");
                                Costo.setText("");
                                Meses.setText("");
                                plan.setEnabled(true);
                        }
                    }
                }
                
            }


        });
        Helpers.Label("CONCLUYE:", Color.BLACK, row4);
        mFTermino = Helpers.Text("", row4);
        sel2=Helpers.Button(">", row4, new ActionListener(){public void actionPerformed(ActionEvent e) {
                cal(3);
        }});
        

        //Datos Escolares
       
        Row row5 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("BECA:", Color.BLACK, row5);
        mBeca = Helpers.Text("", row5);
        mBeca.setWidth(new Extent(60));
        mBeca.setMaximumLength(8);
        Helpers.Label("PROYECTO:", Color.BLACK, row5);
        mProyecto = Helpers.Text("", row5);
        mProyecto.setMaximumLength(30);
        Helpers.Label("JEFE DIRECTO:", Color.BLACK, row5);
        mReporta = Helpers.Text("", row5);
        mReporta.setMaximumLength(60);
        //horarios
        Helpers.Label("HORARIO:", Color.BLACK, row5);
        mHorario = Helpers.SelectField(row5, null);
        Helpers.Label("A:", Color.BLACK, row5);
        mHorario2 = Helpers.SelectField(row5, null);

       // ENCABEZADOS
       Row enc2 = Helpers.Row("Default", new Extent(5), col1);
       Helpers.Label("DATOS ESCOLARES", new Color(0x011dac), enc2);
       enc2.setAlignment(Alignment.ALIGN_CENTER);
       //enc2.setBorder(new Border(new Extent(5), Color.BLUE,1));
        
        Row row6 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("UNIVERSIDAD:", Color.BLACK, row6);
        mSelUniversidad = Helpers.SelectField(row6, null);
        mSelUniversidad.setWidth(new Extent(600));


        Row row7 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("MATRICULA:", Color.BLACK, row7);
        mMatricula = Helpers.Text("", row7);
        mMatricula.setMaximumLength(15);
        Helpers.Label("CARRERA:", Color.BLACK, row7);
        mSelCarrera = Helpers.SelectField(row7, null);
        mSelCarrera.setWidth(new Extent(400));

        Row row8 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("CICLO ESCOLAR:", Color.BLACK, row8);
        mSelCiclo = Helpers.SelectField(row8, null);
        mSelCiclo.setWidth(new Extent(120));
        Helpers.Label("GRADO:", Color.BLACK, row8);
        mGrado = Helpers.Text("", row8);
        mGrado.setWidth(new Extent(30));
        mGrado.setMaximumLength(5);
        Helpers.Label("ESCOLARIDAD:", Color.BLACK, row8);
        mSelEscolaridad = Helpers.SelectField(row8, null);
        mSelEscolaridad.setWidth(new Extent(250));
        

        //ENCABEZADOS
       Row enc3 = Helpers.Row("Default", new Extent(5), col1);
       Helpers.Label("DATOS DE LA EMPRESA", new Color(0x011dac), enc3);
       enc3.setAlignment(Alignment.ALIGN_CENTER);
       //enc3.setBorder(new Border(new Extent(5), Color.BLUE,1));

        Row row9 = Helpers.Row("Default", new Extent(5), col1);
        Helpers.Label("DEPARTAMENTO:", Color.BLACK, row9);
        mSelDepto = Helpers.SelectField(row9, null);
        mSelDepto.setWidth(new Extent(250));
        Helpers.Label("CENTRO DE COSTOS:", Color.BLACK, row9);
        mSelCCosto = Helpers.SelectField(row9, null);
        mSelCCosto.setWidth(new Extent(250));

        //Direccion
        Column col3=new Column();
        mDireccion = new vDireccion(col3);
        mDireccion.mCalle.setMaximumLength(100);
        mDireccion.mNumExt.setWidth(new Extent(60));
        mDireccion.mNumInt.setWidth(new Extent(60));
        mDireccion.mZip.setWidth(new Extent(60));
         mDireccion.mNumExt.setMaximumLength(7);
          mDireccion.mNumInt.setMaximumLength(7);
          col3.setInsets(new Insets(20));
          col3.setCellSpacing(new Extent(20));
          col3.setLayoutData(tp3);
        //Botones
        

        Row rh = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("Introduzca la informacion requerida.", Color.BLACK, rh);

        Row ln1 = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("COBRAR POLIZA A:", Color.BLACK, ln1);
        CobrarA = Helpers.SelectField(ln1, null);
        Helpers.Label("ASEGURADORA:", Color.BLACK, ln1);
        Aseguradora = Helpers.SelectField(ln1, null);
        Helpers.Label("PLAN:", Color.BLACK, ln1);
        plan = Helpers.SelectField(ln1, null);

        Row ln12 = Helpers.Row("Default", new Extent(5), col2);//SEPARADORES


        Row ln2 = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("PERDIDAS ORGANICAS:", Color.BLACK, ln2);
        perdida = Helpers.Text("", ln2);
        perdida.setEnabled(false);
        Helpers.Label("REEMBOLSO GASTOS:", Color.BLACK, ln2);
        Reembolso = Helpers.Text("", ln2);
        Reembolso.setEnabled(false);
        Helpers.Label("COSTO POLIZA:", Color.BLACK, ln2);
        Costo = Helpers.Text("", ln2);
        Costo.setEnabled(false);

        Row ln123 = Helpers.Row("Default", new Extent(5), col2);//SEPARADORES

        Row ln3 = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("MESES:", Color.BLACK, ln3);
        Meses = Helpers.Text("", ln3);
        Meses.setEnabled(false);
        Helpers.Label("FECHA INICIO:", Color.BLACK, ln3);
        SegInicio = Helpers.Text("", ln3);
        SegInicio.setEnabled(false);
        Helpers.Label("FECHA TERMINO:", Color.BLACK, ln3);
        SegTermino = Helpers.Text("", ln3);
        SegTermino.setEnabled(false);

        Row ln1234 = Helpers.Row("Default", new Extent(5), col2);//SEPARADORES

        Row ln4 = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("BENEFICIARIO 1:", Color.BLACK, ln4);

        beneficiario1 = Helpers.Text("", ln4);
        Helpers.Label("PORCENTAJE 1:", Color.BLACK, ln4);
        beneficiario1.setMaximumLength(120);
        porcentaje1 = Helpers.Text("", ln4);
        porcentaje1.setMaximumLength(3);
        Helpers.Label("PARENTESCO 1:", Color.BLACK, ln4);
        parentesco1 = Helpers.Text("", ln4);
        parentesco1.setMaximumLength(20);

        Row ln12345 = Helpers.Row("Default", new Extent(5), col2);//SEPARADORES

        Row ln5 = Helpers.Row("Default", new Extent(5), col2);
        Helpers.Label("BENEFICIARIO 2:", Color.BLACK, ln5);
        beneficiario2 = Helpers.Text("", ln5);
        beneficiario2.setMaximumLength(120);
        Helpers.Label("PORCENTAJE 2:", Color.BLACK, ln5);
        porcentaje2 = Helpers.Text("", ln5);
        porcentaje2.setMaximumLength(3);
        Helpers.Label("PARENTESCO 2:", Color.BLACK, ln5);
        parentesco2 = Helpers.Text("", ln5);
        parentesco2.setMaximumLength(20);

        col2.setLayoutData(tp2);
        mRFC.setEnabled(false); // RFC Nunca es editable


        mFInicio.setEnabled(false);
        mFTermino.setEnabled(false);
        if(!empresa.getPracticantes_seguro()){
            mListPFCerrada.setEnabled(false);
            tp.add(col1);
            tp.add(col3);
        }else{

         mListPFCerrada.setEnabled(true);
            
            tp.add(col1);
            tp.add(col3);
            tp.add(col2);
         }
        if(mAction != READONLY){
                if(empresa.getFechaTerminoAbierta() ){
                    sel2.setEnabled(true);
                }else{
                    sel2.setEnabled(false);
                }
        }else{
            sel1.setEnabled(false);
            sel2.setEnabled(false);
            mListPFCerrada.setEnabled(false);
            mHorario.setEnabled(false);
            mHorario2.setEnabled(false);
            CobrarA.setEnabled(false);
            Aseguradora.setEnabled(false);
            plan.setEnabled(false);
            beneficiario1.setEnabled(false);
            porcentaje1.setEnabled(false);
            parentesco1.setEnabled(false);
            beneficiario2.setEnabled(false);
            porcentaje2.setEnabled(false);
            parentesco2.setEnabled(false);
        }
        mbGuardar = Helpers.Button2("GUARDAR", new ActionListener(){public void actionPerformed(ActionEvent e) {menu_guardar(e);}});
        mbCancelar = Helpers.Button2("CANCELAR", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuCancelar(e);}});

        CatLocales(); // Carga los ENUMS
        UpdateView();
        accion();
        permisos();
        mFInicio.setEnabled(false);
        mFTermino.setEnabled(false);
        sp=Helpers.SplitPaneHelper(SplitPane.ORIENTATION_HORIZONTAL, new ExtentEx(200,ExtentEx.PX), false);
        sp2=Helpers.SplitPaneHelper(SplitPane.ORIENTATION_HORIZONTAL, new ExtentEx(200,ExtentEx.PX), false);
        sp.add(sp2);
        sp.add(tp);
        sp2.add(menuABC());
        
        add(sp);
    }
    private Column menuABC(){
        Column c=new Column();
        Button menu= Helpers.Button2("MENU PRACTICANTE", new ActionListener(){public void actionPerformed(ActionEvent e) {MenuCancelar(e);}});
        menu.setHeight(new Extent(30));
        
        Row l1,l2,l3,l4;
        l1=new Row();
        l2=new Row();
        l3=new Row();
        l4=new Row();

        l1.add(menu);
        l2.add(mVista.getMbNuevo());
        l3.add(mbGuardar);
        l4.add(mbCancelar);

        c.add(l1);
        c.add(l2);
        c.add(l3);
        c.add(l4);
        c.setInsets(new Insets(25));
        c.setCellSpacing(new Extent(10));
        return c;

    }
    public  void fechaAbierta(int num){
        Date fecha_final=null;
        Date fecha_inicio=null;
        if(mFInicio.getText().trim().equals("") && mFTermino.getText().trim().equals("")){
            //plan=new SelectField();
            return;
           }
        if(empresa.getPracticantes_seguro()==true){
            if(!mFInicio.getText().trim().equals("")&&!mFTermino.getText().trim().equals("")){
                try {
                        fecha_inicio=spd.parse(mFInicio.getText().trim());
                        fecha_final=spd.parse(mFTermino.getText().trim());
                        if(fecha_inicio.getTime()==fecha_final.getTime()){
                                mFTermino.setText("");
                                plan.setEnabled(false);
                                if(mAction != EDITAR)
                                    SegTermino.setText("");
                                add(new Aviso("Seleccion de Mes", "Las Fechas Son Iguales"));
                                return;
                        }else{
                            if(fecha_inicio.getTime()>fecha_final.getTime()){
                                    mFTermino.setText("");
                                    
                                        SegTermino.setText("");
                                        fechaFin=new Date();
                                        String aux=spd.format(fechaFin);
                                        fechaFin=spd.parse(aux);
                                        //plan=new SelectField();
                                        add(new Aviso("Seleccion de Mes", "La Fecha de Termino debe ser Mayor a la Fecha de Inicio"));

                                        return;

                            }
                        }
                } catch (Exception e) {
                                    e.printStackTrace();
                                    mFInicio.setText("");
                                    mFTermino.setText("");
                                    fechaFin=new Date();
                                    String aux=spd.format(fechaFin);

                                         if(mAction != EDITAR){
                                            SegInicio.setText("");
                                            SegTermino.setText("");
                                         }

                                    add(new Aviso("Seleccion de Mes", "Error Con Alguna de las Fechas"));
                                    return;
                                    //plan=new SelectField();
                }


                for(int i=1;i<=6;i++){
                    try {
                         Calendar cal=Calendar.getInstance();
                         Date ini_w=spd.parse(mFInicio.getText().trim());
                         cal.setTime(ini_w);
                         cal.add(Calendar.MONTH, i);
                         String ffin_w=spd.format(cal.getTime());
                         Date fmes=spd.parse(ffin_w);
                         long timeFin=fmes.getTime()+(1000 * 60 * 60 * 24);
                         if(ini_w.getTime()<=fecha_final.getTime() && fecha_final.getTime()<timeFin){
                            num=i;
                            break;
                         }
                         if(i==6 && num <= 0){
                            if(fecha_final.getTime()>=timeFin){
                                mFTermino.setText("");
                                fechaFin=new Date();
                                String aux=spd.format(fechaFin);
                                fechaFin=spd.parse(aux);
                                add(new Aviso("Seleccion de Mes", "Fecha Mayor a 6 Meses,El limite es:"+spd.format(fmes)));
                                return;
                            }
                         }
                    } catch (Exception e) {
                        mFInicio.setText("");
                         mFTermino.setText("");
                         if(mAction != EDITAR){
                            SegInicio.setText("");
                            SegTermino.setText("");
                         }
                                   
                            //plan.setModel(new DefaultListModel());
                            //plan=new SelectField();

                            e.printStackTrace();
                    }
                }
            }

            if(num!=0){
                  if(mAction != EDITAR){
                    SegInicio.setText(mFInicio.getText());
                    SegTermino.setText(mFTermino.getText());

                    if(Aseguradora.getSelectedIndex()!=-1){
                            Aseguradora asg=(Aseguradora)Aseguradora.getSelectedItem();
                            planesList=dPracticante.getPlanes(asg.getAseguradoraId(),num);
                            plan.setModel(new DefaultListModel(planesList.toArray()));
                            plan.setSelectedIndex(-1);
                            perdida.setText("");
                            Reembolso.setText("");
                            Costo.setText("");
                            Meses.setText("");
                            plan.setEnabled(true);
                    }else{
                        plan=new SelectField();
                        add(new Aviso("Seleccion de Mes", "Favor de Seleccionar una Aseguradora"));
                        return;
                    }
                }
            }else{/*
                        plan=new SelectField();
                        add(new Aviso("Seleccion de Mes", "Problemas Con Las Fechas"));
                        return;*/
                    }
                    

                }
    }

    public void cal(int opc){
        int posx=70;
        int posy=70;
        WindowPane newWP=new WindowPane();
        if((opc == 1 || opc == 2) && ventInicio == 0){
            newWP.setPositionX(new Extent(posx));
            newWP.setPositionY(new Extent(posy));
            ventInicio=1;
            newWP.setTitle("Fecha de Inicio");
            newWP.add(new org.sapra.echo.Calendario(this,opc));
            add(newWP);
        }if(opc == 3 && ventFin == 0){
            newWP.setPositionX(new Extent(posx+260));
            newWP.setPositionY(new Extent(posy));
            newWP.setTitle("Fecha de Termino");
            ventFin=1;
            newWP.add(new org.sapra.echo.Calendario(this,opc));
            add(newWP);
        }
        if(opc == 4 && ventFin == 0){
            newWP.setPositionX(new Extent(posx));
            newWP.setPositionY(new Extent(posy));
            newWP.setTitle("Fecha de Nacimiento");
            ventFin=1;
            newWP.add(new org.sapra.echo.Calendario(this,opc));
            add(newWP);
        }
        newWP.setWidth(new Extent(250));
        newWP.setHeight(new Extent(250));
        newWP.setClosable(false);
        
        
        
    }
  
    private List<Aseguradora> aseguradoraList;
    private List<Planseguro> planesList;


     public void accion(){
     Aseguradora.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int id=mListPFCerrada.getSelectedIndex();
                if(id<0)
                    return;
                Aseguradora asg=(Aseguradora)Aseguradora.getSelectedItem();
                planesList=dPracticante.getPlanes(asg.getAseguradoraId(),id+1);
                plan.setModel(new DefaultListModel(planesList.toArray()));
            }
        });
      plan.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                Planseguro ps=(Planseguro)plan.getSelectedItem();
                perdida.setText(""+ps.getPerdidasOrganicas());
                Reembolso.setText(""+ps.getRembolsoGastos());
                Costo.setText(""+ps.getCostoPoliza());
                Meses.setText(""+ps.getMesesAmparados());
            }
        });

     }


    private void UpdateView() {
        //Carga los Catalogos
        List<Carrera> carreras = dCarrera.getCarreras(0,null);
        mSelCarrera.setModel(new DefaultListModel(carreras.toArray()));

        aseguradoraList=dPracticante.getAseguradora(empresa.getEmpresaId());
        Aseguradora.setModel(new DefaultListModel(aseguradoraList.toArray()));
        Aseguradora.setSelectedIndex(0);
        //Universidad
        List<Universidad> universidades = dUniversidad.getUniversidades(0,null);
        mSelUniversidad.setModel(new DefaultListModel(universidades.toArray()));

        //Centro de Costos
        List<CCosto> ccostos = dCentroCosto.getCCosto(dLogin.getEmpresa());
        mSelCCosto.setModel(new DefaultListModel(ccostos.toArray()));

        //Departamento
        List<Departamento> deptos = dDepartamento.getDepartamentos(dLogin.getEmpresa());
        mSelDepto.setModel(new DefaultListModel(deptos.toArray()));

        
        if(mAction == RENOVAR){
            // Prepara la Alta
            mCurrent = null;
        }else if(mAction == EDITAR){
            mNombre.setEnabled(true);
            mPaterno.setEnabled(true);
            mMaterno.setEnabled(true);
            mNatalicio.setEnabled(false);
            mFInicio.setEnabled(true);
           
        }else if(mAction == READONLY){
            // Hace todos los campos ReadOnly
            SetEdit(false);
            mbCancelar.setText("CERRAR");

        }

        
        if( mAction != READONLY){
                mFTermino.setEnabled(true);
        }
        

        return;
    }

    //***********************ESTABLECE AL PRACTICANTE************************//
    private void SetPracticante(Practicante p) {
        
        Calendar fnacimiento = Calendar.getInstance();
        //fnacimiento.setTime(p.getFec_nacimiento());
        mNatalicio.setText(spd.format(p.getFec_nacimiento()));

        if(mAction!=RENOVAR){
            fechaInicio=p.getFec_inicioContrato();
        }else{
            fechaInicio=p.getFec_terminoContrato();

        }
        mFInicio.setText(spd.format(fechaInicio));
        mMatricula.setText(p.getMatricula());
        if(mAction!=RENOVAR){
                fechaFin=p.getFec_terminoContrato();
                mFTermino.setText(spd.format(fechaFin));
        }
        
        
        mNombre.setText(p.getNombre());
        mPaterno.setText(p.getPaterno());
        mMaterno.setText(p.getMaterno());
        
        //mRFC.setText(p.getRfc());
        mRFC.setText(p.getRfc_Str(p.getNombre(),p.getPaterno(),p.getMaterno(),p.getFec_nacimiento()));
        mTelefono.setText(p.getTelefono());
        mEmail.setText(p.getEmail());
        mBeca.setText(Double.toString(p.getSueldo()));
        mProyecto.setText(p.getProyecto());
        mReporta.setText(p.getReportara());
        mGrado.setText(p.getGrado());
        mDireccion.SetDireccion(p.getFk_direccionId());
        mHorario.setSelectedItem(p.getHorarioInicio());
        mHorario2.setSelectedItem(p.getHorarioFin());
        //Catalogos en DB
        mSelUniversidad.setSelectedItem(new Universidad(p.getFk_universidadId()));
        mSelCarrera.setSelectedItem(new Carrera(p.getFk_carreraId()));
        mSelDepto.setSelectedItem(new Departamento(p.getFk_departamentoId()));
        mSelCCosto.setSelectedItem(new CCosto(p.getFk_centroCostoId()));
        mSelSexo.setSelectedItem(p.getSexo());
        //Catalogos Locales
        mSelEdoCivil.setSelectedItem(p.getEdo_civil());
        mSelCiclo.setSelectedItem(p.getCiclo_escolar());
        mSelEscolaridad.setSelectedItem(p.getEscolaridad());
        if(empresa.getPracticantes_seguro()){
                    ModelXML xml=new ModelXML(p.getPracticanteId(),0);
                    

                    beneficiario1.setText(xml.getNombre1());
                    porcentaje1.setText(""+xml.getPorcentaje1());
                    parentesco1.setText(xml.getParentesco1());
                    beneficiario2.setText(xml.getNombre2());
                    porcentaje2.setText(""+xml.getPorcentaje2());
                    parentesco2.setText(xml.getParentesco2());
                    Aseguradora.setSelectedIndex(0);
                    SegInicio.setText(spd.format(fechaInicio));
                     if(mAction!=RENOVAR){
                         mListPFCerrada.setSelectedIndex(xml.getDuracion()-1);

                         planesList=dPracticante.getPlanes(2,xml.getDuracion());
                         plan.setModel(new DefaultListModel(planesList.toArray()));

                         SegTermino.setText(spd.format(fechaFin));

                            for(int i=0;i<planesList.size();i++){
                                Planseguro ps=(Planseguro)planesList.get(i);
                                if(ps.getPlanSeguroId()==xml.getPlan()){
                                            plan.setSelectedItem(ps);
                                            perdida.setText(""+ps.getPerdidasOrganicas());
                                            Reembolso.setText(""+ps.getRembolsoGastos());
                                            Costo.setText(""+ps.getCostoPoliza());
                                            Meses.setText(""+ps.getMesesAmparados());
                                }
                            }
                     }else{
                            mListPFCerrada.setSelectedIndex(-1);
                     }
                    
                    if(xml.getCobroAEmpresa()==1)
                        CobrarA.setSelectedIndex(0);
                    else
                        CobrarA.setSelectedIndex(1);
        }
        
        
       
        return;
    }

    private void CatLocales() {
        //Sexo
        lmSexo = new DefaultListModel();
        lmSexo.add("MASCULINO");
        lmSexo.add("FEMENINO");
        mSelSexo.setModel(lmSexo);
        mHorario.setModel(horariosModel());
        mHorario2.setModel(horariosModel());


        //Escolaridad
        lmEscolaridad = new DefaultListModel();
        lmEscolaridad.add("SIN ESCOLARIDAD");
        lmEscolaridad.add("PRIMARIA");
        lmEscolaridad.add("SECUNDARIA");
        lmEscolaridad.add("PREPARATORIA");
        lmEscolaridad.add("DIPLOMADO-ESPECIALIDAD");
        lmEscolaridad.add("CARRERA TECNICA");
        lmEscolaridad.add("LICENCIATURA PROFESIONAL");
        lmEscolaridad.add("POSTGRADO MAESTRIA,DOCTORADO");
        lmEscolaridad.add("SIN ESCOLARIZAR");
        lmEscolaridad.add("PROFESIONAL");
        mSelEscolaridad.setModel(lmEscolaridad);
        mSelEscolaridad.setSelectedIndex(9);
        //Estado Civil
        lmEdoCivil = new DefaultListModel();
        lmEdoCivil.add("VIUDO");
        lmEdoCivil.add("UNION LIBRE");
        lmEdoCivil.add("SOLTERO");
        lmEdoCivil.add("CASADO");
        lmEdoCivil.add("DIVORCIADO");
        lmEdoCivil.add("SEPARADO");
        mSelEdoCivil.setModel(lmEdoCivil);
        mSelEdoCivil.setSelectedIndex(2);

        //Ciclo Escolar
        lmCiclo = new DefaultListModel();
        lmCiclo.add("MENSUAL");
        lmCiclo.add("BIMESTRE");
        lmCiclo.add("TRIMESTRE");
        lmCiclo.add("TETRAMESTRE");
        lmCiclo.add("PENTAMESTRE");
        lmCiclo.add("SEMESTRE");
        //lmCiclo.add("BLOQUE");
        lmCiclo.add("ANUAL");
        mSelCiclo.setModel(lmCiclo);
        mSelCiclo.setSelectedIndex(5);
        //combo de contrato por mensualidades
        lmFcontrato=new DefaultListModel();
        lmFcontrato.add("1 MESES");
        lmFcontrato.add("2 MESES");
        lmFcontrato.add("3 MESES");
        lmFcontrato.add("4 MESES");
        lmFcontrato.add("5 MESES");
        lmFcontrato.add("6 MESES");
        mListPFCerrada.setModel(lmFcontrato);

        //Cobrar Poliza A
        CobrarPolizaA=new DefaultListModel();
        CobrarPolizaA.add("Empresa");
        CobrarPolizaA.add("Practicante");
        CobrarA.setModel(CobrarPolizaA);
        CobrarA.setSelectedIndex(0);
    }
    
    
    void MenuCancelar (ActionEvent e){
        mVista.ContenedorPrincipal();
       
    }
    int PrefacturaSeguro(Practicante p){
        int regreso=0;
        try {
            String ini_Contrato=spd.format(p.getFec_inicioContrato());
            PrefacturaMO pmodel=new PrefacturaMO();
            String fechaInicioStr="";
            String fechaTerminoStr="";
            List<Periodo> periodos = pmodel.getPeriodos(empresa.getEmpresaId(),1,p);
            if(periodos.size()>0){
                for(int i=0;i<periodos.size();i++){
                    Periodo pe=(Periodo)periodos.get(i);
                    return regreso=pe.index;
                }
            }else{
                
                return regreso=0;
            }
                
        } catch (Exception e) {
        }
            
            return regreso;
    }

    SimpleDateFormat formato=new SimpleDateFormat("yyyy-MM-dd");
    ArrayList<String> fechas=new ArrayList<String>();
    int dia_prefactura=0;
    int retroactivo=0;

    public int dias_pago(Date inicio,Date fin,int dia_prefactura){
        Calendar cal_inicio,cal_termino;
        fechas = new ArrayList<String>();
        String dia_inicio="",dia_fin="";
        try {
            this.dia_prefactura=dia_prefactura;
            dia_inicio = formato.format(inicio);
            dia_fin = formato.format(fin);

            inicio = formato.parse(dia_inicio);
            fin = formato.parse(dia_fin);

            cal_inicio = Calendar.getInstance();
            cal_termino = Calendar.getInstance();

            cal_inicio.setTime(inicio);
            cal_termino.setTime(fin);

            while( cal_inicio.getTimeInMillis() <= cal_termino.getTimeInMillis() ){
                Date dia=cal_inicio.getTime();
                cal_inicio.add(Calendar.DATE, 1);
                fechas.add(formato.format(dia));
            }
            elimina_dia31();
            if(fechas.isEmpty())
                return 0;
            else
                return fechas.size();

        }catch (Exception e) {
            return 0;
        }
    }
    public void elimina_dia31(){
        String fecha_aux;
        String[] destajo_fecha;
        try {
             for(int i=0;i<fechas.size();i++){
                  fecha_aux = (String)fechas.get(i);
                  destajo_fecha=fecha_aux.split("-");
                  if((this.dia_prefactura != 14) && destajo_fecha[2].equals("31")){
                      if(!(mAction == ALTA || mAction == RENOVAR)){
                            fechas.remove(i);
                             i--;
                      }
                        
                  }
             }//mAction == ALTA || mAction == RENOVAR
        } catch (Exception e) {

        }

    }
    public void periodo_Actual(Date p_inicio){
        PrefacturaMQuery query=new PrefacturaMQuery();
        String parseo="";
        Date actual=new Date();
        Calendariofacturacionpracticantes c;
        PrefacturaCaintra factura;
        periodo_actual=null;
        
        try {
            parseo = spd.format(actual);
            actual=spd.parse(parseo);

            parseo = spd.format(p_inicio);
            p_inicio=spd.parse(parseo);

            if(p_inicio.getTime()>=actual.getTime())//si la fecha de inicio es mayor que el dia de hoy
                    actual=p_inicio;

            lista_periodo = query.getPeriodos(empresa.getEmpresaId());
            for(int i=0;i<lista_periodo.size();i++){
                    c=(Calendariofacturacionpracticantes)lista_periodo.get(i);

                    if(actual.getTime()<= c.getDia_pago().getTime()){//te dice en que periodo se tiene que pagar,
                        //o que esta actualmente la prefactura
                        factura=query.isPeriodo_Autorizado(c.getCalendarioFacturacionPracticantesId());
                        if(factura == null){
                            periodo_actual=c;
                            break;
                        }
                    }
            }
            retroactivo(p_inicio);
        } catch (Exception e) {
        }
    }
    public void retroactivo(Date p_inicio){
        PrefacturaMQuery query=new PrefacturaMQuery();
        String parseo="";
        Calendariofacturacionpracticantes c;
        retroactivo=0;
        try {
            if(periodo_actual == null)
                return;
            parseo = spd.format(p_inicio);
            p_inicio=spd.parse(parseo);

            lista_periodo = query.getPeriodos(empresa.getEmpresaId());
            for(int i=0;i<lista_periodo.size();i++){
                    c=(Calendariofacturacionpracticantes)lista_periodo.get(i);
                    if(p_inicio.getTime() <= c.getDia_inicio().getTime() ||
                            (p_inicio.before(c.getDia_fin()) && p_inicio.after(c.getDia_inicio())
                            || (p_inicio.equals(c.getDia_inicio())||p_inicio.equals(c.getDia_fin())))
                            ){
                            if(c.equals(periodo_actual)){
                                break;
                            }else{
                                //if(p_inicio.after(periodo_actual.getDia_limite_aut_fac())){
                                if(p_inicio.after(c.getDia_inicio()))
                                    retroactivo+=dias_pago(p_inicio, c.getDia_fin(), c.getDias_a_pagar_periodo());
                                else
                                    retroactivo+=dias_pago(c.getDia_inicio(), c.getDia_fin(), c.getDias_a_pagar_periodo());
                            //}
                        }
                    }
            }
        } catch (Exception e) {
        }
    }


    void menu_guardar(ActionEvent e){
        PrefacturaMQuery query=new PrefacturaMQuery();
        AjusteQuery ajuste_q=new AjusteQuery();
        String msj=null;
        Practicante p;
        int id_direccion=-1;
        int id_practicante=-1;
        int id_poliza=0;
        aig ag=new aig();
        EMailMO emo=new EMailMO();
        try {
             msj=Validar();
             if(msj!=null){
                 add(new wAviso("Error", msj));
                 return ;
             }

             p = getFields();
             if(p==null){
                    add(new wAviso("Error", "Error en la carga de la informacion"));
                    return;
             }

             periodo_Actual(p.getFec_inicioContrato());

            if( dPracticante.getRFC(p) == false ){
                add(new wAviso("ERROR","NO SE PUEDE CALCULAR EL RFC"));
                return;
            }

             if(mAction != EDITAR){

                 if(mAction == ALTA || mAction == RENOVAR){
                         id_direccion = mDireccion.SaveDireccion(true);
                         if(id_direccion <= -1){
                            add(new wAviso("ERROR","Error al guardar la direccion"));
                            return;
                         }
                         p.setFk_direccionId(id_direccion);
                         if(mAction == ALTA){
                             id_practicante=dPracticante.pract_siguiente();
                             p.setLigaPracticanteId(id_practicante);

                         }
                         if(mAction == RENOVAR){
                                p.setLigaPracticanteId(mCurrent.getPracticanteId());
                                if(mCurrent.getFec_cancelacion()==null){
                                        if( dPracticante.Baja(mCurrent,mCurrent.getFec_terminoContrato()) == -1){
                                            add(new wAviso("ERROR","ERROR EN LA BAJA"));
                                            return;
                                        }
                                }
                         }
                         id_practicante = dPracticante.SaveInsert(p);

                         if( id_practicante <= 0){
                                    //Error al Salvar el Practicante
                                    add(new wAviso("ERROR","ERROR AL GUARDAR EL PRACTICANTE"));
                                    return;
                                }
                         p.setPracticanteId(id_practicante);
                         ConvenioPDF pdf=new ConvenioPDF(id_practicante,1);
                         if(empresa.getPracticantes_seguro()){
                                Polizaseguro pz=getPolizaField(p);
                                /*
                                if(p.getSueldo() < 0.0 && CobrarA.getSelectedIndex()!= 0){
                                }else{
                                    add(new wAviso("ERROR","ERROR AL GUARDAR EL LA POLIZA SEGURO"));
                                    return;
                                }*/

                             id_poliza=dPracticante.savePoliza(pz);
                             if(polizas !=null && !polizas.isEmpty()){
                                    dPracticante.multiplePoliza(polizas);
                             }
                             if(id_poliza==-1){
                                  add(new wAviso("ERROR","ERROR AL GUARDAR EL LA POLIZA SEGURO"));
                                  return;
                             }
                              int res=ag.CreatePoliza(p.getPracticanteId());
                              //DAC_Insert ext=new DAC_Insert();
                              //ext.insertCuenta(p.getPracticanteId());
                         }
                    if(retroactivo > 0){
                            Facturaajuste ajuste_retro = new Facturaajuste();
                            ajuste_retro.setCometario("CONCEPTO DE RETROACTIVO");
                            ajuste_retro.setFactor(retroactivo);
                            ajuste_retro.setFk_convenioId(id_practicante);
                            ajuste_retro.setInterno(false);
                            ajuste_retro.setLogin("SAPRA");
                            ajuste_retro.setTiempo(true);
                            ajuste_retro.setFk_periodoId(periodo_actual.getCalendarioFacturacionPracticantesId());
                            ajuste_retro.setFk_usuarioId(1);
                            ajuste_retro.setFecha(new Date());
                            ajuste_q.insertAjuste(ajuste_retro);
                     }
                    if(mAction == ALTA){
                        query.generacion_cuenta(p.getPracticanteId(), 0);
                        add(new wAviso("FELICITACIONES","ALTA GENERADA CORRECTAMENTE"));
                        emo.envioPracticante(1, p, empresa,id_poliza);

                    }
                    if(mAction == RENOVAR){
                        Date termino_p;
                        Date inicio_p = p.getFec_inicioContrato();
                        Calendar cal_aux=Calendar.getInstance();
                        if(mCurrent.getFec_cancelacion() == null)
                            termino_p = mCurrent.getFec_terminoContrato();
                        else{
                            if(mCurrent.getFec_terminoContrato().after(mCurrent.getFec_cancelacion()))
                                termino_p = mCurrent.getFec_cancelacion();
                            else
                                termino_p = mCurrent.getFec_terminoContrato();
                        }
                        cal_aux.setTime(inicio_p);
                        cal_aux.add(Calendar.MONTH, -3);

                        if(cal_aux.getTime().after(termino_p))
                            query.generacion_cuenta(p.getPracticanteId(), 0);
                        else
                            query.generacion_cuenta(p.getPracticanteId(), mCurrent.getPracticanteId());
                        add(new wAviso("FELICITACIONES","RENOVACION GENERADA CORRECTAMENTE"));
                        emo.envioPracticante(2, p, empresa,id_poliza);
                    }
                 }
                 
             }else{
                 if (mAction == EDITAR) {
                 dPracticante.ValidarEdicion(p,mCurrent);
                 int dir = dDireccion.update(encapsulacion());
                 p.setFk_direccionId(dir);
                     //dDireccion.update(encapsulacion());
                 id_practicante = dPracticante.SaveUpdate(p);
                 File f=null;
                 if(id_practicante!=-1){
                        try {
                            emo.envioPracticante(4, p, empresa,0);
                            Polizaseguro ps=new Polizaseguro(p.getPracticanteId(),0);
                            if(empresa.getPracticantes_seguro()){
                                verificaFecha(p);
                            }
                            //f=new File("/opt/innoapps/tomcat/webapps/ROOT/practicantes/pdf/polizaaccidente"+p.getPracticanteId()+".pdf");
                            f=new File("C:/Users/develop/Documents/DocsSapra/Poliza/polizaaccidente"+p.getPracticanteId()+".pdf");
                            //f=new File("/home/cobain/Escritorio/polizaaccidente"+p.getPracticanteId()+".pdf");
                                if(f==null){
                                    ConvenioPDF pdf=new ConvenioPDF(p.getPracticanteId(),0);
                                }else{
                                    f.delete();
                                    ConvenioPDF pdf=new ConvenioPDF(p.getPracticanteId(),0);
                                }
                        } catch (Exception exc) {
                            exc.printStackTrace();
                            add(new wAviso("ERROR","FALLO AL EDITAR"));
                            return;
                        }

                        //add(new wAviso("FELICITACIONES","EDICION GENERADA CORRECTAMENTE"));
                    }
                 }
                 
             }
              MenuCancelar(null); // Sale de la Ventana
              return;
        } catch (Exception ex) {
        }

    }


    ArrayList<Polizaseguro> polizas ;
    public void Polizas_Mensuales(Practicante p,Polizaseguro ps,Planseguro plan){
        polizas=new ArrayList<Polizaseguro>();
        Calendar c=Calendar.getInstance();
        PrefacturaCaintra factura;
        Calendariofacturacionpracticantes cal;
        PrefacturaMQuery query=new PrefacturaMQuery();
        Date actual=p.getFec_inicioContrato();
        Date mes_adelante=p.getFec_inicioContrato();
        Polizaseguro poliza_aux;
        try {
            c.setTime(actual);
            c.add(Calendar.MONTH, 1);
            actual=c.getTime();

            c.setTime(mes_adelante);
            c.add(Calendar.MONTH, 2);
            mes_adelante=c.getTime();


            for(int i=0;i<lista_periodo.size();i++){
                 cal=(Calendariofacturacionpracticantes)lista_periodo.get(i);
                    if(actual.getTime()< cal.getDia_pago().getTime()){//te dice en que periodo se tiene que pagar,
                        //o que esta actualmente la prefactura
                        int id1=0;
                        int id2=0;

                        id1=(int)cal.getCalendarioFacturacionPracticantesId();
                        id2=(int)ps.getFkprefacturaId();
                        if(!(id1==id2)){
                        factura=query.isPeriodo_Autorizado(cal.getCalendarioFacturacionPracticantesId());
                        if(factura == null){
                                poliza_aux=new Polizaseguro();
                                poliza_aux.setFecCreacion(new Date());
                                poliza_aux.setFec_inicio(actual);
                                poliza_aux.setFec_termino(mes_adelante);
                                poliza_aux.setBeneficiario1(ps.getBeneficiario1());
                                poliza_aux.setPorcentaje1(ps.getPorcentaje1());
                                poliza_aux.setParentesco1(ps.getParentesco1());
                                poliza_aux.setBeneficiario2(ps.getBeneficiario2());
                                poliza_aux.setPorcentaje2(ps.getPorcentaje2());
                                poliza_aux.setParentesco2(ps.getParentesco2());
                                poliza_aux.setNumero_Poliza("0");
                                poliza_aux.setFk_practicanteId(p.getPracticanteId());
                                poliza_aux.setFk_planseguroId(plan.getPlanSeguroId());

                                poliza_aux.setCobrarPolizaAEmpresa(ps.isCobrarPolizaAEmpresa());
                                poliza_aux.setRevisadoPorAseguradora(false);
                                poliza_aux.setRutaArchivo("");
                                poliza_aux.setPagado(false);
                                poliza_aux.setFkprefacturaId(cal.getCalendarioFacturacionPracticantesId());

                                polizas.add(poliza_aux);

                                if((i+1)>=lista_periodo.size())
                                    break;
                                
                                c.setTime(actual);
                                c.add(Calendar.MONTH, 1);
                                actual=c.getTime();


                                if(actual.getTime()< p.getFec_terminoContrato().getTime()){
                                    c.setTime(mes_adelante);
                                    c.add(Calendar.MONTH, 1);
                                    mes_adelante=c.getTime();
                                }else{
                                    break;
                                }
                        }
                }
                   }
            }

        } catch (Exception e) {
        }


    }

    public Polizaseguro getPolizaField(Practicante p){
            Polizaseguro ps=new Polizaseguro();
            Date dt=new Date();
            String fix_date="";
            try {
                 ps.setFecCreacion(dt);
                 fix_date=spd.format(dt);
                 dt=spd.parse(fix_date);


                 if(p.getFec_inicioContrato().getTime()>=dt.getTime())
                    ps.setFec_inicio(spd.parse(mFInicio.getText()));
                 else{
                    ps.setFec_inicio(dt);
                 }
                 ps.setFec_termino(spd.parse(mFTermino.getText()));
                 ps.setBeneficiario1(beneficiario1.getText());
                 ps.setPorcentaje1(Short.parseShort(porcentaje1.getText()));
                 ps.setParentesco1(parentesco1.getText());
                 ps.setBeneficiario2(beneficiario2.getText());
                 ps.setPorcentaje2(Short.parseShort(porcentaje2.getText()));
                 ps.setParentesco2(parentesco2.getText());
                 ps.setNumero_Poliza("0");
                 ps.setFk_practicanteId(p.getPracticanteId());
                 Planseguro pn=(Planseguro)plan.getSelectedItem();
                 ps.setFk_planseguroId(pn.getPlanSeguroId());
                 if(CobrarA.getSelectedIndex()==0)
                    ps.setCobrarPolizaAEmpresa(true);
                 else
                     ps.setCobrarPolizaAEmpresa(false);
                 ps.setRevisadoPorAseguradora(false);
                 ps.setRutaArchivo("");
                 ps.setPagado(false);
                 if(periodo_actual != null)
                        ps.setFkprefacturaId(periodo_actual.getCalendarioFacturacionPracticantesId());

                 if(pn.getPlanSeguroId()==2 || pn.getPlanSeguroId()==20)
                        if(mListPFCerrada.getSelectedIndex()>0)
                        Polizas_Mensuales(p, ps,pn);

                }
                catch (Exception exc) {
                    exc.printStackTrace();
                    System.out.println("Error en Get Field");
                    return null;
                }
          return ps;
    }
    private String Validar() {

        String msj1="Formato Erroneo para ";
        String msj2="Debe ser Numerico";
        String msj3="Favor de Seleccionar una Opcion de ";
        String msj4="Favor de Llenar el campo";
        try {
            

            mReporta.setText(quitaNumero(mReporta.getText()));
            if(mFInicio.getText().trim().equals(""))return msj4+" Fecha de Inicio";
            if(mFTermino.getText().trim().equals(""))return msj4+" Fecha de Termino";
            int dias=5;
            Date hoy = new Date();
            Usuario u = dLogin.getUser();
            if (!u.getTipoUsuario().trim().toLowerCase().equals("a")) {
                long forward = 0;
                long back = 0;
                Calendar cal2 = Calendar.getInstance();
                String sf_w=spd.format(fechaInicio);
                Date fec_w=spd.parse(sf_w);

                String x = spd.format(hoy);
                cal2.setTime(spd.parse(x));
                if (mAction == ALTA) {
                    cal2.add(Calendar.DATE, 7);
                    String y=spd.format(cal2.getTime());
                    Date adelante = spd.parse(y);
                    forward = adelante.getTime();
                    //agrega 5 dias

                    cal2.setTime(spd.parse(x));
                    cal2.add(Calendar.DATE, -7);
                    y = spd.format(cal2.getTime());
                    Date atras = spd.parse(y);
                    back = atras.getTime();
                    if (!(fec_w.getTime() >= back && fec_w.getTime() <= forward)) {
                        return "La Fecha Excede El Limite De Dias Permitidos";
                    }

                }
                if (mAction == RENOVAR) {
                    cal2.add(Calendar.DATE, 21);
                    String y=spd.format(cal2.getTime());
                    Date adelante = spd.parse(y);
                    forward = adelante.getTime();
                    //agrega 5 dias

                    cal2.setTime(spd.parse(x));
                    cal2.add(Calendar.DATE, -21);
                    y = spd.format(cal2.getTime());
                    Date atras = spd.parse(y);
                    back = atras.getTime();
                    if (!(fec_w.getTime() >= back && fec_w.getTime() <= forward)) {
                        return "La Fecha Excede El Limite De Dias Permitidos ";
                    }

                }
            }

            
           if(mBeca.getText().trim().equals(""))return msj4+" Beca";
            double x1=0.0;
            try {
                x1=Double.parseDouble(mBeca.getText().trim());
                if(x1<0)
                    return "Beca Debe ser Mayor o Igual a 0";
            } catch (Exception e) {
                return "Formato de Beca Erroneo";
            }


            if(empresa.getPracticantes_seguro()){
                 if(CobrarA.getSelectedIndex()<0)
                            return "Favor de Seleccionar a quien Se cobra el Seguro";
                if(x1>0 ||CobrarA.getSelectedIndex()==0){
                                    if(empresa.getFechaTerminoAbierta()){
                                            Calendar fechita = GregorianCalendar.getInstance();
                                            fechita.setTime(fechaInicio);
                                            fechita.add(Calendar.MONTH,6);

                                            if(fechaFin.getTime()>fechita.getTime().getTime()){
                                                return "La Fecha Es Mayor a 6 Meses";
                                            }
                                    }else{
                                         if(mListPFCerrada.getSelectedIndex()<0){
                                                    return "Favor de Seleccionar la Cantidad de Mes";
                                                }
                                    }



                                   
                                    if(Aseguradora.getSelectedIndex()<0)
                                        return "Favor de Seleccionar una Aseguradora";

                                    if(plan.getSelectedIndex()<0)
                                        return "Favor de Seleccionar Un Plan de Seguro";

                                    int a=0;
                                    int b=0;
                                    int suma=0;
                                    try {
                                        a=Integer.parseInt(porcentaje1.getText().trim());
                                        } catch (Exception e) {
                                            return "Formato de Porcentaje 1 Erroneo";
                                        }
                                    if(a==100){
                                        beneficiario2.setText("");
                                        porcentaje2.setText("0");
                                        parentesco2.setText("");
                                    }
                                    try {
                                            b=Integer.parseInt(porcentaje2.getText().trim());
                                        } catch (Exception e) {
                                            return "Formato de Porcentaje 2 Erroneo";
                                        }
                                    if(b==100){
                                        beneficiario1.setText("");
                                        porcentaje1.setText("0");
                                        parentesco1.setText("");
                                    }
                                    suma=(a+b);
                                        if(suma!=100){
                                            return "La Suma de Porcentajes Debe ser Igual a 100";

                                        }
                                    if((a==100 && b==0 )|| (b == 100 && a==0)){
                                        if(a==100 && b==0){
                                            if(beneficiario1.getText().trim().equals(""))return msj4+" Beneficiario 1";
                                            beneficiario1.setText(quitaNumero(beneficiario1.getText()));
                                            if(beneficiario1.getText().trim().equals(""))return msj4+" Beneficiario 1";

                                            if(parentesco1.getText().trim().equals(""))return msj4+" Parentesco 1";
                                            parentesco1.setText(quitaNumero(parentesco1.getText()));
                                            if(parentesco1.getText().trim().equals(""))return msj4+" Parentesco 1";
                                        }if(b == 100 && a==0){
                                             if(beneficiario2.getText().trim().equals(""))return msj4+" Beneficiario 2";
                                            beneficiario2.setText(quitaNumero(beneficiario2.getText()));
                                            if(beneficiario2.getText().trim().equals(""))return msj4+" Beneficiario 2";

                                            if(parentesco2.getText().trim().equals(""))return msj4+" Parentesco 2";
                                            parentesco2.setText(quitaNumero(parentesco2.getText()));
                                            if(parentesco2.getText().trim().equals(""))return msj4+" Parentesco 2";
                                        }
                                    //brenda 811-039-0503
                                    }else{
                                        if(beneficiario1.getText().trim().equals(""))return msj4+" Beneficiario 1";
                                            beneficiario1.setText(quitaNumero(beneficiario1.getText()));
                                            if(beneficiario1.getText().trim().equals(""))return msj4+" Beneficiario 1";

                                            if(parentesco1.getText().trim().equals(""))return msj4+" Parentesco 1";
                                            parentesco1.setText(quitaNumero(parentesco1.getText()));
                                            if(parentesco1.getText().trim().equals(""))return msj4+" Parentesco 1";

                                             if(beneficiario2.getText().trim().equals(""))return msj4+" Beneficiario 2";
                                            beneficiario2.setText(quitaNumero(beneficiario2.getText()));
                                            if(beneficiario2.getText().trim().equals(""))return msj4+" Beneficiario 2";

                                            if(parentesco2.getText().trim().equals(""))return msj4+" Parentesco 2";
                                            parentesco2.setText(quitaNumero(parentesco2.getText()));
                                            if(parentesco2.getText().trim().equals(""))return msj4+" Parentesco 2";

                                    }
                                    
                }else{
                    if(x1<=0 && CobrarA.getSelectedIndex()==1){
                        return "Cobrar Seguro a Practicante,Su Beca debe ser Mayor que 0";
                    }
                }
            }
            if(mMatricula.getText().trim().equals(""))return msj4+" Matricula";
            if(mNombre.getText().trim().equals(""))return msj4+" Nombre";
            if(mPaterno.getText().trim().equals(""))return msj4+" Paterno";
            if(mMaterno.getText().trim().equals(""))return msj4+" Materno";
            if(mNatalicio.getText().trim().equals(""))return msj4+" Natalicio";
            Date birthday=new Date();
            Calendar calTest=Calendar.getInstance();
            calTest.setTime(birthday);
            calTest.add(Calendar.YEAR, -16);
            try {
                Date f_f=spd.parse(mNatalicio.getText().trim());
                if(calTest.getTimeInMillis()<f_f.getTime())
                    return "Practicantes Deben ser mayor de 16 años";
            } catch (Exception e) {
                return "Formato Erroneo Para la Edad Ej: (1986-01-03)";
            }
            if(mSelSexo.getSelectedIndex()<0)return msj3+" Sexo";
            if(mSelEdoCivil.getSelectedIndex()<0)return msj3+" Estado Civil";
            if(mTelefono.getText().trim().equals(""))return msj4+" Telefono";
            if(mEmail.getText().trim().equals(""))return msj4+" Email";
            if(mFInicio.getText().trim().equals(""))return msj4+" Fecha de Inicio";
            if(mFTermino.getText().trim().equals(""))return msj4+" Fecha de Termino";
            
            if(mProyecto.getText().trim().equals(""))return msj4+" Proyecto";
            if(mReporta.getText().trim().equals(""))return msj4+" Jefe Directo";
            
            if(mSelUniversidad.getSelectedIndex()<0)return msj3+" Universidad";
            if(mSelCarrera.getSelectedIndex()<0)return msj3+" Carrera";
            if(mSelCiclo.getSelectedIndex()<0)return msj3+" Ciclo Escolar";
            if(mGrado.getText().trim().equals(""))return msj4+" Grado";
            if(mSelEscolaridad.getSelectedIndex()<0)return msj3+" Escolaridad";
            if(mSelDepto.getSelectedIndex()<0)return msj3+"Departamento";
            if(mSelCCosto.getSelectedIndex()<0)return msj3+" Centro de Costo";
            if(mDireccion.mSelPais.getSelectedIndex()<0)return msj3+" Pais";
            if(mDireccion.mSelEstado.getSelectedIndex()<0)return msj3+" Estado";
            if(mDireccion.mSelPoblacion.getSelectedIndex()<0)return msj3+" Poblacion";
            if(mDireccion.mSelColonia.getSelectedIndex()<0)return msj3+" Colonia";
            if(mDireccion.mCalle.getText().trim().equals(""))return msj4+" Calle";
             if (mHorario.getSelectedIndex() < 0) {
                return msj4 + "Horario de entrada";
            }
            if (mHorario2.getSelectedIndex() < 0) {
                return msj4 + "Horario de salida";
            }
            if (mHorario.getSelectedIndex() == mHorario2.getSelectedIndex()) {
                return msj1 + "los horarios no pueden ser iguales";
            }

            if (mHorario.getSelectedIndex() > mHorario2.getSelectedIndex()) {
                return "El Horario de Salida No Puede Ser Mayor que el de Entrada";
            }
            String num1=mDireccion.mNumInt.getText().trim();
            String num2=mDireccion.mNumExt.getText().trim();
            if(num1.equals("")&&num2.equals(""))
                return msj3+"Numero Interior o Exterior";
            if(mDireccion.mZip.getText().trim().equals(""))return msj4+" Codigo Postal";

            if(mTelefono.getText().trim().length()!=10)
                return " El Telefono debe de ser de Longitud 10 Caracteres";

            try {
                long x=Long.parseLong(mTelefono.getText().trim());
            } catch (Exception e) {
                return "Formato de Telefono Erroneo";
            }
        } catch (Exception e) {
        }
        return null;
    }

    private Practicante getFields() {
        Practicante resp = new Practicante();
        
        if(mCurrent == null) resp.setPracticanteId(-1); // Lo indica como uno nuevo
        else resp.setPracticanteId(mCurrent.getPracticanteId());

        // Textos
        resp.setNombre(mNombre.getText());
        resp.setPaterno(mPaterno.getText());
        resp.setMaterno(mMaterno.getText());
        resp.setRfc(mRFC.getText());
        Date fec=null;
        try {
            fec = spd.parse(mNatalicio.getText());
        } catch (ParseException ex) {
            Logger.getLogger(vABCP.class.getName()).log(Level.SEVERE, null, ex);
        }
        resp.setRfc(resp.getRfc_Str(mNombre.getText(), mPaterno.getText(), mMaterno.getText(), fec));
        resp.setHorarioInicio(mHorario.getSelectedItem().toString());
        resp.setHorarioFin(mHorario2.getSelectedItem().toString());


        resp.setTelefono(mTelefono.getText());
        resp.setEmail(mEmail.getText());
        if(mBeca.getText().trim().equals(""))
            resp.setSueldo(0);
        else
            resp.setSueldo(Double.parseDouble(mBeca.getText()));
        
        resp.setProyecto(mProyecto.getText());
        resp.setReportara(mReporta.getText());
        resp.setGrado(mGrado.getText());
        resp.setMatricula(mMatricula.getText());

        //Universidad
        Universidad univ = (Universidad)mSelUniversidad.getSelectedItem();
        resp.setFk_universidadId(univ.getUniversidadId());

        //Carrera
        Carrera carrera = (Carrera)mSelCarrera.getSelectedItem();
        resp.setFk_carreraId(carrera.getCarreraId());
        
        //Departamento
        Departamento dep = (Departamento) mSelDepto.getSelectedItem();
        resp.setFk_departamentoId(dep.getDepartamentoId());

        //Centro de Costo
        CCosto ccosto = (CCosto) mSelCCosto.getSelectedItem();
        resp.setFk_centroCostoId(ccosto.getCentroCostoId());

        //Catalogos String - Validar que NO sean nulos
        resp.setSexo(mSelSexo.getSelectedItem().toString()); // Falta Validar si es null
        resp.setEdo_civil(mSelEdoCivil.getSelectedItem().toString()); // Falta Validar si es null
        resp.setCiclo_escolar(mSelCiclo.getSelectedItem().toString()); // Falta Validar si es null
        resp.setEscolaridad(mSelEscolaridad.getSelectedItem().toString()); // Falta Validar si es null

        //Fechas
         // Falta Validar si es null
        //resp.setFec_inicioContrato(mFInicio.getSelectedDate().getTime()); // Falta Validar si es null
        //resp.setFec_terminoContrato(mFTermino.getSelectedDate().getTime()); // Falta Validar si es null
        //resp.setFechaCerrada(mListPFCerrada.getSelectedItem().toString());

        try {
            resp.setFec_nacimiento(spd.parse(mNatalicio.getText()));
            resp.setFec_inicioContrato(spd.parse(mFInicio.getText()));
            resp.setFec_terminoContrato(spd.parse(mFTermino.getText()));
        } catch (Exception e) {
                add(new wAviso("ERROR", "ERROR FEO E INESPERADO (Por las Fechas)!!!"));
                return null;
        }
        if(!RFC.ProcessRFC(resp)){
                    add(new wAviso("ERROR","ERROR EXISTE UN CARACTER NO VALIDO"));
                    return null;
        }



        return resp;
    }


    private void SetEdit(boolean b) {
        mNombre.setEnabled(b);
        mPaterno.setEnabled(b);
        mMaterno.setEnabled(b);
        mNatalicio.setEnabled(b);
        mSelSexo.setEnabled(b);
        mSelEdoCivil.setEnabled(b);
        mRFC.setEnabled(false); // El RFC nunca es editable
        mTelefono.setEnabled(b);
        mEmail.setEnabled(b);
        mFInicio.setEnabled(b);
        mFTermino.setEnabled(b);
        mBeca.setEnabled(b);
        mProyecto.setEnabled(b);
        mMatricula.setEnabled(b);
        mReporta.setEnabled(b);
        mSelUniversidad.setEnabled(b);
        mSelCarrera.setEnabled(b);
        mSelCiclo.setEnabled(b);
        mSelEscolaridad.setEnabled(b);
        mGrado.setEnabled(b);
        mDireccion.SetEdit(b);
        mSelDepto.setEnabled(b);
        mSelCCosto.setEnabled(b);

        // Solo cuando se puede editar, se pude guardar
        mbGuardar.setVisible(b);
    }

     public Direccion encapsulacion(){
        Direccion d=new Direccion();
        try {
            Colonia c=new Colonia();
            c=mDireccion.getColonias().get(mDireccion.mSelColonia.getSelectedIndex());
            d.setdireccionId(mCurrent.getFk_direccionId());
            d.setcalle(mDireccion.mCalle.getText());
            if(mDireccion.mNumInt.getText()==null)
                d.setnumero_interior("");
            else
                d.setnumero_interior(mDireccion.mNumInt.getText());

           if(mDireccion.mNumExt.getText()==null)
                d.setnumero_exterior("");
            else
                d.setnumero_exterior(mDireccion.mNumExt.getText());
            d.settipoDeVia("CA");
            d.setcoloniaId(c.getcoloniaId());
        } catch (Exception e) {
        }
        return d;
    }
    
     

    public void permisos(){
        if(mAction!=READONLY){
            if(empresa.getPracticantes_seguro()==true){
                plan.setEnabled(false);
            }
            
            if(mAction==ALTA){
                fechaInicio = new Date();
                mFInicio.setText(spd.format(fechaInicio.getTime()));
                mListPFCerrada.setEnabled(true);
                //;
            }
            if(empresa.getFechaTerminoAbierta()==true){
                mListPFCerrada.setEnabled(false);
                mFTermino.setEnabled(true);
            }else{
                mListPFCerrada.setEnabled(true);
                mFTermino.setEnabled(false);
            }
            if(mAction==EDITAR){
                CobrarA.setEnabled(false);
                Aseguradora.setEnabled(false);
                plan.setEnabled(false);
                Usuario u = dLogin.getUser();
                    if (u.getTipoUsuario().trim().toLowerCase().equals("a")) {
                            sel1.setEnabled(true);                          
                            if(empresa.getFechaTerminoAbierta()){
                                mListPFCerrada.setEnabled(false);
                                sel2.setEnabled(true);
                            }else{
                                sel2.setEnabled(false);
                                mListPFCerrada.setEnabled(true);
                            }
                    }else{
                        sel1.setEnabled(false);
                        mListPFCerrada.setEnabled(false);
                        sel2.setEnabled(false);
                    }

                mFInicio.setEnabled(false);
                mFTermino.setEnabled(false);
                //mListPFCerrada.setEnabled(false);
            }
            
        }else{
            mListPFCerrada.setEnabled(false);
        }
    }
    public String quitaNumero(String cadena){
        char[] num={'0','1','2','3','4','5','6','7','8','9','@','!','#'};
        cadena=cadena.trim();
        String cadFinal="";
        try {
            for(int i=0;i<cadena.length();i++){
                int flag=0;
                    char c=cadena.charAt(i);
                    for(int j=0;j<num.length;j++){
                        if(c==num[j])
                            flag=1;
                    }
                    if(flag==0)
                        cadFinal+=c;
                    else
                        cadFinal+=" ";
            }
            cadFinal=cadFinal.trim();

        } catch (Exception e) {
        }

        return cadFinal;
    }


       public DefaultListModel horariosModel() {
        DefaultListModel dlm = new DefaultListModel();
        try {
            dlm.add("07:00");
            dlm.add("07:30");
            dlm.add("08:00");
            dlm.add("08:30");
            dlm.add("09:00");
            dlm.add("09:30");
            dlm.add("10:00");
            dlm.add("10:30");
            dlm.add("11:00");
            dlm.add("11:30");
            dlm.add("12:00");
            dlm.add("12:30");
            dlm.add("13:00");
            dlm.add("13:30");
            dlm.add("14:00");
            dlm.add("14:30");
            dlm.add("15:00");
            dlm.add("15:30");
            dlm.add("16:00");
            dlm.add("16:30");
            dlm.add("17:00");
            dlm.add("17:30");
            dlm.add("18:00");
            dlm.add("18:30");
            dlm.add("19:00");
            dlm.add("19:30");
            dlm.add("20:00");
            dlm.add("20:30");

        } catch (Exception e) {
        }

        return dlm;
    }


       public void verificaFecha(Practicante p){
           Calendar calPoliza=Calendar.getInstance();
           List<Polizaseguro> lista=dPracticante.getSeguros(p.getPracticanteId());
           Date now=new Date();
           
           if(lista!=null && lista.size()>0){
           for(int i=0;i<lista.size();i++){
                    Polizaseguro ps=(Polizaseguro)lista.get(i);
                      ps.setBeneficiario1(beneficiario1.getText());
                      ps.setPorcentaje1(Short.parseShort(porcentaje1.getText()));
                      ps.setParentesco1(parentesco1.getText());
                      ps.setBeneficiario2(beneficiario2.getText());
                      ps.setPorcentaje2(Short.parseShort(porcentaje2.getText()));
                      ps.setParentesco2(parentesco2.getText());
                      ps.setFec_inicio(fechaInicio);
                      ps.setFec_termino(fechaFin);
                      dPracticante.updatePoliza(ps);
                      aig ag=new aig();
                      if(ps ==null || (ps.getNumero_Poliza().trim().equals("") || ps.getNumero_Poliza().trim().equals("0"))){
                      
                      }else
                        ag.xmlEditar(ps);
           }


           }
           
           try {
              

           } catch (Exception e) {
           }

       }


    public Date getFechaFin() {
        return fechaFin;
    }

    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    public Date getFechaInicio() {
        return fechaInicio;
    }

    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    public TextField getmFInicio() {
        return mFInicio;
    }

    public void setmFInicio(TextField mFInicio) {
        this.mFInicio = mFInicio;
    }

    public TextField getmFTermino() {
        return mFTermino;
    }

    public void setmFTermino(TextField mFTermino) {
        this.mFTermino = mFTermino;
    }

    public SelectField getmListPFCerrada() {
        return mListPFCerrada;
    }

    public void setmListPFCerrada(SelectField mListPFCerrada) {
        this.mListPFCerrada = mListPFCerrada;
    }

    public int getVentFin() {
        return ventFin;
    }

    public void setVentFin(int ventFin) {
        this.ventFin = ventFin;
    }

    public int getVentInicio() {
        return ventInicio;
    }

    public void setVentInicio(int ventInicio) {
        this.ventInicio = ventInicio;
    }

    public TextField getSegInicio() {
        return SegInicio;
    }

    public void setSegInicio(TextField SegInicio) {
        this.SegInicio = SegInicio;
    }

    public TextField getSegTermino() {
        return SegTermino;
    }

    public void setSegTermino(TextField SegTermino) {
        this.SegTermino = SegTermino;
    }

    //********************ESTABLECER LOS PERMISOS*********************//
    /*public void permisos(){
        if(empresa.getPracticantes_seguro()==true){
            plan.setEnabled(false);
        }
        if(empresa.getFechaTerminoAbierta()==true){
            mListPFCerrada.setEnabled(false);
            mFTermino.setEnabled(true);
        }else{
            mListPFCerrada.setEnabled(true);
            mFTermino.setEnabled(false);
        }
        if(mAction==ALTA){
            fechaInicio = new Date();
            mFInicio.setText(spd.format(fechaInicio.getTime()));
        }
    }
    public String quitaNumero(String cadena){
        char[] num={'0','1','2','3','4','5','6','7','8','9','@','!','#'};
        cadena=cadena.trim();
        String cadFinal="";
        try {
            for(int i=0;i<cadena.length();i++){
                int flag=0;
                    char c=cadena.charAt(i);
                    for(int j=0;j<num.length;j++){
                        if(c==num[j])
                            flag=1;
                    }
                    if(flag==0)
                        cadFinal+=c;
                    else
                        cadFinal+=" ";
            }
            cadFinal=cadFinal.trim();

        } catch (Exception e) {
        }

        return cadFinal;
    }


       public DefaultListModel horariosModel() {
        DefaultListModel dlm = new DefaultListModel();
            dlm.add("07:00");
            dlm.add("07:30");
            dlm.add("08:00");
            dlm.add("08:30");
            dlm.add("09:00");
            dlm.add("09:30");
            dlm.add("10:00");
            dlm.add("10:30");
            dlm.add("11:00");
            dlm.add("11:30");
            dlm.add("12:00");
            dlm.add("12:30");
            dlm.add("13:00");
            dlm.add("13:30");
            dlm.add("14:00");
            dlm.add("14:30");
            dlm.add("15:00");
            dlm.add("15:30");
            dlm.add("16:00");
            dlm.add("16:30");
            dlm.add("17:00");
            dlm.add("17:00");
            dlm.add("18:00");
            dlm.add("18:30");
            dlm.add("19:00");
            dlm.add("19:30");
            dlm.add("20:00");
            dlm.add("20:30");
            return dlm;
    }*/

 public TextField getmNatalicio() {
        return mNatalicio;
 
    }
    public void setmNatalicio(TextField mNatalicio) {
        this.mNatalicio = mNatalicio;
    }

    public int getmAction() {
        return mAction;
    }

    public void setmAction(int mAction) {
        this.mAction = mAction;
    }
    void MenuGuardar (ActionEvent e){
        int fk_prefacturaId=0;
        // Validar Campos, Validacion del Input en Front-Layer
        String msj=null;
        msj=Validar();
        if(msj!=null){
             add(new wAviso("Error", msj));
             return ;
        }

        //Obtiene los Campos
        Practicante p = getFields();
        if(p==null){
            return;
        }
        fk_prefacturaId=PrefacturaSeguro(p);

        //Polizaseguro ps= getPolizaField(p.getPracticanteId());

        //Calula el RFC
        if( dPracticante.getRFC(p) == false ){
            add(new wAviso("ERROR","NO SE PUEDE CALCULAR EL RFC"));
            return;
        }
        int dir=0;
        try {
            if(mAction == ALTA){
                dPracticante.ValidarAlta(p);
                dir = mDireccion.SaveDireccion(true);
            }else if(mAction == RENOVAR){
                dPracticante.ValidarRenovacion(p,mCurrent);
                if(mCurrent.getFec_cancelacion()==null){
                     if( dPracticante.Baja(mCurrent,mCurrent.getFec_terminoContrato()) == -1){
                            add(new wAviso("ERROR","ERROR EN LA BAJA"));
                            return;
                        }
                }
                dir = mDireccion.SaveDireccion(true);
            }else if(mAction == EDITAR){
                dPracticante.ValidarEdicion(p,mCurrent);
                dir = dDireccion.update(encapsulacion());
            }
        }catch(Exception ex) {
            Logger.getLogger(vABCP.class.getName()).log(Level.SEVERE, null, ex);
            add(new wAviso("ERROR",ex.toString()));
            return;
        }

        // Validar Poliza, Fecha de Inicio / Meses

        // Generar Poliza de Seguro en Aseguradora

        // Guarda la Direccion

        if(dir < 0){
            add(new wAviso("ERROR","NO SE PUEDE GUARDAR LA DIRECCION"));
            return;
        }
        p.setFk_direccionId(dir);

        // Guardar Practicante
        int pid = -1;
        if(mAction == ALTA || mAction == RENOVAR){
            pid = dPracticante.SaveInsert(p);

            if( pid <= 0){
                        //Error al Salvar el Practicante
                        add(new wAviso("ERROR","ERROR AL GUARDAR EL PRACTICANTE"));
                        return;
                    }
            p.setPracticanteId(pid);
            int ret=0;
            ConvenioPDF pdf=new ConvenioPDF(pid,1);
            if(empresa.getPracticantes_seguro()){
                Double x1=Double.parseDouble(mBeca.getText().trim());

                if(x1>0 || CobrarA.getSelectedIndex()==0){
                        Polizaseguro pz=getPolizaField(p);
                        ret=dPracticante.savePoliza(pz);
                        if(ret==-1){
                            add(new wAviso("ERROR","ERROR AL GUARDAR EL LA POLIZA SEGURO"));
                            return;
                        }
                         if(fk_prefacturaId==0){
                            EMailMO emo=new EMailMO();
                            String msjEMO=empresa.getEmpresaId()+" "+empresa.getRazon_empresa()+"\n";
                            msjEMO+=""+p.getPracticanteId()+" "+p.getNombre()+" "+p.getPaterno()+" "+p.getMaterno()+"\n";
                            msjEMO+="PolizaSeguroId "+ret;
                            emo.envioAdministrador(msjEMO, "Falta Agregar Seguro");
                        }
                        aig ag=new aig();
                        int res=ag.CreatePoliza(pid);
                        DAC_Insert ext=new DAC_Insert();
                        ext.insertCuenta(pid);
                        if(res<1){
                             add(new wAviso("ERROR","ERROR AL GENERAR EL LA POLIZA SEGURO"));
                            return;
                        }
                }
            }
            EMailMO emo=new EMailMO();
            if(mAction == ALTA){
                add(new wAviso("FELICITACIONES","ALTA GENERADA CORRECTAMENTE"));
                emo.envioPracticante(1, p, empresa,ret);

            }
            if(mAction == RENOVAR){
                add(new wAviso("FELICITACIONES","RENOVACION GENERADA CORRECTAMENTE"));
                emo.envioPracticante(2, p, empresa,ret);
            }
        }else if (mAction == EDITAR) {
            pid = dPracticante.SaveUpdate(p);
            File f=null;
            if(pid!=-1){
                try {
                    EMailMO emo=new EMailMO();
                    emo.envioPracticante(4, p, empresa,0);



                    Polizaseguro ps=new Polizaseguro(p.getPracticanteId(),0);
                    if(empresa.getPracticantes_seguro()){

                        verificaFecha(p);

                    }
                    f=new File("C:/Users/develop/Documents/DocsSapra/Poliza/polizaaccidente"+p.getPracticanteId()+".pdf");
                    //f=new File("/home/luiz/Escritorio/polizaaccidente"+p.getPracticanteId()+".pdf");
                    //f=new File("/home/cobain/Escritorio/polizaaccidente"+p.getPracticanteId()+".pdf");
                        if(f==null){
                            ConvenioPDF pdf=new ConvenioPDF(p.getPracticanteId(),0);
                        }else{
                            f.delete();
                            ConvenioPDF pdf=new ConvenioPDF(p.getPracticanteId(),0);
                        }
                } catch (Exception exc) {
                    exc.printStackTrace();
                    add(new wAviso("ERROR","FALLO AL EDITAR"));
                    return;
                }


            }
        }



        // Guardar Poliza
        MenuCancelar(null); // Sale de la Ventana
        return;

    }

    
}
 
      


  